`
https://leetcode.cn/problems/distinct-points-reachable-after-substring-removal/
`

const DIST = {
  U: [0, 1],
  D: [0, -1],
  L: [-1, 0],
  R: [1, 0]
}

/**
 * @param {string} s
 * @param {number} k
 * @return {number}
 */
var distinctPoints = function (s, k) {
  // 对于给定的 s 路径，终点也是固定的，从 s 里删掉几个移动，相当于终点发生了偏移
  // 那么可以等价为从终点出发，要删掉的路径就是要走的路径，得到一个新终点，判断新终点的数量就是答案
  const n = s.length
  const curPos = [0, 0]
  const res = new Set()
  let left = 0, right = 0

  // 维护一个长度为 k 的滑动窗口
  while (right < n) {
    const [x, y] = DIST[s[right++]]
    curPos[0] += x
    curPos[1] += y

    if (right - left >= k) {
      // 使用集合去重相同的终点
      res.add(`${curPos[0]}-${curPos[1]}`)
      const [bx, by] = DIST[s[left++]]
      curPos[0] -= bx
      curPos[1] -= by
    }
  }

  return res.size
};